<!DOCTYPE html>
<html>
    <head>
        <!-- 当前文档的字符集编码为utf-8 -->
        <meta charset="utf-8">
        <meta name="author" content="disenQF" >
        <meta name="keywords" content="CGI开发 H5模板 千锋教育 西安物联网">
        <title>HTML5模板-js基本语法</title>
        <!-- 引入外联样式文件 -->
        <link rel="stylesheet" href="/css/my.css">
        <style>
            
        </style>
    </head>
    <body>
       <script>
          /*
           多行注释，js的基本语法： 变量的定义与数据类型、算术运算、关系运算、逻辑运行、分支、循环、数组
          */
        // 1. 变量的定义
        let name = 'disen'; // let 是ES6中定义的，目的是优化var定义变量用于增强局部变量的作用域
        console.log(name);
        console.log(typeof(name)); // 查看变量的类型  字符串的类型 string

        let x = 5.0;  // number 数值型（整型、小数类型）
        let y = '4';  // string

        console.log(x, typeof(x));

        // + 一个字符串变量和任意变量的内容都是字符串拼接
        let z = x + y;  // 54，  默认情况下将小数及0去掉了，即先转化为整数再和字符串拼接
        let n = y + x;   // 45
        console.log(z, n);

        let m = x * y;  // 数字字符串和数值进行 *, / 运算时，会自动将字符串转化为数值再计算
        console.log(m, typeof(m));

        let n1 = "123";
        let n2 = "4.5";
        // 将数值字符串转化为数值的方式： Number(), parseInt(), parseFloat()
        let n1_ = Number(n2);  //  Number(n1)
        console.log(n1_, typeof(n1_));

        let n2_ = parseInt(n2);  // 只取整数部分
        console.log(n2_, typeof(n2_));

        let n3_ = parseFloat(n2);  // 保留整数和小数
        console.log(n3_, typeof(n3_));

        let x2 = "123abc";
        let x3 = "1.5abc";
        let x4  = "abc123";
        // 任务： 使用Number(),parseInt(),parseFloat()分别对x2,x3,x4进行转化，查看结果，并总结。
        console.log(Number(x2), Number(x3), Number(x4));  // 全是NaN (Not a Number 不是一个数值)
        console.log(parseInt(x2), parseInt(x3), parseInt(x4)); // 将字符串前n个整数部分转化成数值,如果字符串前n个没有 数字则为NaN
        console.log(parseFloat(x2), parseFloat(x3), parseFloat(x4)); // 将字符串前n个带小数部分转化成数值,如果字符串前n个没有数字则为NaN
        
        let x5 = null; // 声明并定义初始化为null
        let x6;  // 声明，未定义 undefined
        console.log(x5, x6);

        // if(x5 == null && x6==undefined){
        //     alert("x5 为 空 且 x6未定义!");
        // }

        // if(){}else{}
        // if(){} else if(){} else {}

        let total = 0;
        for(let i=1;i<=100;i++){
            if(i % 2 == 0)
                total += i;
        }
        console.log(total);

        // 定义数组
        let names = ["A", "B", "C"];  // 数组在js中一个对象， 对象即有属性，访问方式同c的结构体变量的成员访问
        names.push("D"); //向数组添加一个元素
        names.splice(2, 1); // 将数组中的2下标元素开始删除1个元素
        for(let i = 0; i<names.length; i++){
            console.log(names[i]);  // 数组成员的访问使用下标索引
        }
        // 查找A是否在数组中
        console.log(names.indexOf('C') ); // indexOf()获取数组的元素下标，如果存在则返回下标，不存在则返回-1

        // const修饰的是常量,  js中新增 for-in循环
        for (const idx in names) {
            console.log(idx, names[idx]);
        }

        // 使用数组对象本身的forEach函数
        // function(){} 匿名函数, 一般用于回调
        // js中函数回调，回调可以传更多的参数，但接收时可以只接收左边开始的前几个
        names.forEach(function(item, idx, arr){
            console.log(item, idx, arr);
        })

        let c = 1;
        // js支持布尔类型 bool, true 真，  false 假
        while(true){
            c++;
            console.log(c);
            if(c == 10) break;
        }

       </script>
    </body>
</html>
